package br.com.esporte.persistence.DAO.impl;

import java.util.List;

import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import br.com.base.persistencia.DAO.impl.GenericDAOImpl;
import br.com.esporte.model.TipoEsporteEnum;
import br.com.esporte.model.Usuario;
import br.com.esporte.model.atualizacao.Atualizacao;
import br.com.esporte.model.atualizacao.TipoAtualizacaoEnum;
import br.com.esporte.persistence.DAO.AtualizacaoDAO;
import br.com.esporte.persistence.filter.FiltroAtualizacao;

/**
 * @author Milton Domingues
 */
@Repository
public class AtualizacaoDAOImpl extends GenericDAOImpl<Atualizacao, Long, FiltroAtualizacao> implements AtualizacaoDAO{

	public AtualizacaoDAOImpl() {
		super(Atualizacao.class);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Atualizacao> consultarAtualizacaoGruposUsuario(Usuario usuario, TipoEsporteEnum tipo, int qtd, int offset){

		StringBuilder hql = new StringBuilder();
		hql.append("SELECT atu FROM Atualizacao atu ");
		hql.append("WHERE atu.grupo IN (");
		hql.append("SELECT gruP.grupo FROM GrupoParticipante gruP WHERE gruP.grupo.tipo = :tipoEsporte AND gruP.participante = :participante) ");
		hql.append("OR atu.tipoAtualizacao = :tipo ");
		hql.append("OR atu.usuario = :usuario ");
		hql.append("ORDER BY atu.dataExibicao DESC ");

		Query query = createQuery(hql.toString());
		query.setParameter("tipoEsporte", tipo);
		query.setParameter("participante", usuario);
		query.setParameter("usuario", usuario);
		query.setParameter("tipo", TipoAtualizacaoEnum.NOVO_COMUNICADO);
		query.setFirstResult(offset);
		query.setMaxResults(qtd);


		return query.getResultList();
	}

}
